#ifndef MYMAPCONTAINER_H
#define MYMAPCONTAINER_H
#include "myabstractmapcontainer.h"
#include <QDebug>
#include <QMap>
#include <QVariant>

/** Шаблонизированный наследник MyAbstractMapContainer.
 *
 * При создании должны быть указаны те же типы, что и
 * у оборачиваемого объекта QMap.
 * @author Василий Почкаенко
 */
template <class Key, class T>
class MyMapContainer : public MyAbstractMapContainer{
private:
	QMap< Key, T> * m;
public:
	MyMapContainer(QMap< Key, T> * map): m(map){}

	~MyMapContainer(){
		delete m;
	}

	/** Получить ключь по индексу.*/
	QVariant getKey(const int i) const { return m->keys().at(i);	}

	/** Получить значение по индексу.*/
	QVariant getValue(const int i) const {
		if (i >= m->size())
			return QVariant();

		return m->value(m->keys().at(i));
	}

	/** Установить значение по индексу.*/
	void setValue(const int i, const QVariant & value){
		(*m)[m->keys().at(i)] = value.value<T>();
	}

	/** Установить ключ по индексу.
	 *
	 * Добавляет копию элемента с новым ключём и удаляет старый.
	 */
	void setKey(const int i, const QVariant & key){
		Key oldK= m->keys().at(i);
		(*m)[key.value<Key>()] = m->value(oldK);
		m->remove(oldK);
	}

	/** Удалить элемент по индексу.*/
	bool deleteItem(const int i){ return m->remove(m->keys().at(i)) > 0; }

	/** Получить размер масива*/
	int size() const { return m->size(); }
};

#endif // MYMAPCONTAINER_H
